package OOA.com.JavaBasis.inherit;
/*
* 子类（能访问自己的成员变量和方法，父类非私有的成员变量和方法
* 当父类和子类中，如果成员变量名称相同，在创建子类对象后，直接调用的成员变量是子类的
* 当父类和子类中，如果成员变量名称相同，在创建子类对象后，子类下调用父类的成员变量，可以通过间接的方式，如访问方法的方式去访问父类的成员变量
* 方法如果重名，子类可以自己访问自己的，也可以间接访问父类的（将重名的方法放在另外一个方法中，子类也就继承了访问）如Person类中的 a（）方法
*
* 父类（能够直接访问自己的成员变量和方法）
* 父类不能访问到子类的成员变量
* 父类可以访问子类的方法，只不过只能访问的是被重写的方法
*
* 在继承关系中，能够调的东西优先在本类中查找
*
* =====================================================================================================================
*成员方法的应用
* 【方法重写】
*  概念：在继承关系中，方法名相同，参数列表也相同的方法
*  特点：如果使用父类的引用（对象）指向子类的对象的方式,要注意看该方法是否在子类中发生重新，如果方法重写，那么得到的结果回收子类重写之后的那一份
*  父类的引用（对象）指向子类的对象的方式 指的是 Person p1 = new Teacher（）；
*
* 【方法重写注意细节：】
* 1.要发生重写，必须方法名相同，参数列表相同
* 2.子类重写的方法前可以显示的添加@override，表示这个方法是重写方法，也可以省略
* 3.子类重写的方法，父类的返回值类型如果是void/8种基本数据类型，必须保持一致
*                父类的返回值类型如果是引用数据类型，子类的重写方法可以返回父类类型或者父类的子类型
* 4.修饰词：如果父类的修饰词是public，子类也一定是public，子类的修饰词权限要>=父类的修饰词权限
* 修饰词权限：public > protected > (default) > private
* 如果方法前面什么权限修饰符都没有则默认是（default），default不能写出来
* */
public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.a);

        Teacher teacher = new Teacher();
        System.out.println(teacher.a);
        System.out.println(teacher.getA());//间接的访问父类的成员变量

        System.out.println("=================================");

        teacher.method();

        System.out.println("===================================");
        Person p1 = new Teacher();//父类的引用（对象）指向子类的对象的方式
        System.out.println(p1.a);
        System.out.println(p1.getA());
    }
}
